﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Misuzilla.Crigate.Handler
{
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
    public abstract class AppDomainAttribute : Attribute { }
    
    /// <summary>
    /// 親アプリケーションドメインに読み込まれる必要があることを表します。
    /// </summary>
    public class ParentAppDomainAttribute : AppDomainAttribute { }
    
    /// <summary>
    /// 独立したアプリケーションドメインを必要とすることを表します。
    /// </summary>
    public class IsolatedAppDomainAttribute : AppDomainAttribute {}
    
    /// <summary>
    /// 共有できるアプリケーションドメインを必要とすることを表します。
    /// </summary>
    public class SharedAppDomainAttribute : AppDomainAttribute
    {
        public String AppDomainName { get; private set; }
        public SharedAppDomainAttribute(String appDomainName)
        {
            AppDomainName = appDomainName;
        }
    }

    /// <summary>
    /// 自動でインスタンス化される必要があることを表します。
    /// </summary>
    public class ActivateContextAttribute : Attribute
    {
        public ActivateContexts ActivateContext { get; set; }
        public ActivateContextAttribute(ActivateContexts context)
        {
            ActivateContext = context;
        }
    }

    /// <summary>
    /// インスタンス化されるタイミング
    /// </summary>
    public enum ActivateContexts
    {
        /// <summary>
        /// 自動ではインスタンス化されません
        /// </summary>
        Manual             =  0,
        /// <summary>
        /// セッション初期化時にインスタンス化されます
        /// </summary>
        SessionInitialized = 1,
        /// <summary>
        /// セッション開始時にインスタンス化されます
        /// </summary>
        SessionStarted     = 2
    }
}
